{
  "cells": [
    {
      "cell_type": "markdown",
      "source": [
        "# Linear Regression Using Linear Algebra"
      ],
      "metadata": {
        "nteract": {
          "transient": {
            "deleting": false
          }
        }
      }
    },
    {
      "cell_type": "code",
      "source": [
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
        "import pandas as pd\n",
        "\n",
        "import warnings\n",
        "warnings.filterwarnings(\"ignore\")\n",
        "\n",
        "# yahoo finance is used to fetch data \n",
        "import yfinance as yf\n",
        "yf.pdr_override()"
      ],
      "outputs": [],
      "execution_count": 1,
      "metadata": {
        "collapsed": true,
        "jupyter": {
          "source_hidden": false,
          "outputs_hidden": false
        },
        "nteract": {
          "transient": {
            "deleting": false
          }
        },
        "execution": {
          "iopub.status.busy": "2022-05-08T22:51:23.034Z",
          "iopub.execute_input": "2022-05-08T22:51:23.039Z",
          "iopub.status.idle": "2022-05-08T22:51:23.470Z",
          "shell.execute_reply": "2022-05-08T22:51:23.486Z"
        }
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# input\n",
        "symbol = 'AMD'\n",
        "start = '2014-01-01'\n",
        "end = '2018-08-27'\n",
        "\n",
        "# Read data \n",
        "dataset = yf.download(symbol,start,end)\n",
        "\n",
        "# View Columns\n",
        "dataset.head()"
      ],
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "[*********************100%***********************]  1 of 1 completed\n"
          ]
        },
        {
          "output_type": "execute_result",
          "execution_count": 2,
          "data": {
            "text/plain": "            Open  High   Low  Close  Adj Close    Volume\nDate                                                    \n2014-01-02  3.85  3.98  3.84   3.95       3.95  20548400\n2014-01-03  3.98  4.00  3.88   4.00       4.00  22887200\n2014-01-06  4.01  4.18  3.99   4.13       4.13  42398300\n2014-01-07  4.19  4.25  4.11   4.18       4.18  42932100\n2014-01-08  4.23  4.26  4.14   4.18       4.18  30678700",
            "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Open</th>\n      <th>High</th>\n      <th>Low</th>\n      <th>Close</th>\n      <th>Adj Close</th>\n      <th>Volume</th>\n    </tr>\n    <tr>\n      <th>Date</th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>2014-01-02</th>\n      <td>3.85</td>\n      <td>3.98</td>\n      <td>3.84</td>\n      <td>3.95</td>\n      <td>3.95</td>\n      <td>20548400</td>\n    </tr>\n    <tr>\n      <th>2014-01-03</th>\n      <td>3.98</td>\n      <td>4.00</td>\n      <td>3.88</td>\n      <td>4.00</td>\n      <td>4.00</td>\n      <td>22887200</td>\n    </tr>\n    <tr>\n      <th>2014-01-06</th>\n      <td>4.01</td>\n      <td>4.18</td>\n      <td>3.99</td>\n      <td>4.13</td>\n      <td>4.13</td>\n      <td>42398300</td>\n    </tr>\n    <tr>\n      <th>2014-01-07</th>\n      <td>4.19</td>\n      <td>4.25</td>\n      <td>4.11</td>\n      <td>4.18</td>\n      <td>4.18</td>\n      <td>42932100</td>\n    </tr>\n    <tr>\n      <th>2014-01-08</th>\n      <td>4.23</td>\n      <td>4.26</td>\n      <td>4.14</td>\n      <td>4.18</td>\n      <td>4.18</td>\n      <td>30678700</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
          },
          "metadata": {}
        }
      ],
      "execution_count": 2,
      "metadata": {
        "collapsed": true,
        "jupyter": {
          "source_hidden": false,
          "outputs_hidden": false
        },
        "nteract": {
          "transient": {
            "deleting": false
          }
        },
        "execution": {
          "iopub.status.busy": "2022-05-08T22:51:23.475Z",
          "iopub.execute_input": "2022-05-08T22:51:23.479Z",
          "iopub.status.idle": "2022-05-08T22:51:24.151Z",
          "shell.execute_reply": "2022-05-08T22:51:24.209Z"
        }
      }
    },
    {
      "cell_type": "code",
      "source": [
        "dataset.shape"
      ],
      "outputs": [
        {
          "output_type": "execute_result",
          "execution_count": 3,
          "data": {
            "text/plain": "(1171, 6)"
          },
          "metadata": {}
        }
      ],
      "execution_count": 3,
      "metadata": {
        "collapsed": true,
        "jupyter": {
          "source_hidden": false,
          "outputs_hidden": false
        },
        "nteract": {
          "transient": {
            "deleting": false
          }
        },
        "execution": {
          "iopub.status.busy": "2022-05-08T22:51:24.156Z",
          "iopub.execute_input": "2022-05-08T22:51:24.159Z",
          "iopub.status.idle": "2022-05-08T22:51:24.167Z",
          "shell.execute_reply": "2022-05-08T22:51:24.211Z"
        }
      }
    },
    {
      "cell_type": "code",
      "source": [
        "X = dataset['Open']\n",
        "y = dataset['Adj Close'] "
      ],
      "outputs": [],
      "execution_count": 4,
      "metadata": {
        "collapsed": true,
        "jupyter": {
          "source_hidden": false,
          "outputs_hidden": false
        },
        "nteract": {
          "transient": {
            "deleting": false
          }
        },
        "execution": {
          "iopub.status.busy": "2022-05-08T22:51:24.172Z",
          "iopub.execute_input": "2022-05-08T22:51:24.175Z",
          "iopub.status.idle": "2022-05-08T22:51:24.181Z",
          "shell.execute_reply": "2022-05-08T22:51:24.214Z"
        }
      }
    },
    {
      "cell_type": "code",
      "source": [
        "X = np.array(X).reshape(1171,-1)\n",
        "y = np.array(y).reshape(1171,-1)"
      ],
      "outputs": [],
      "execution_count": 5,
      "metadata": {
        "collapsed": true,
        "jupyter": {
          "source_hidden": false,
          "outputs_hidden": false
        },
        "nteract": {
          "transient": {
            "deleting": false
          }
        },
        "execution": {
          "iopub.status.busy": "2022-05-08T22:51:24.187Z",
          "iopub.execute_input": "2022-05-08T22:51:24.190Z",
          "shell.execute_reply": "2022-05-08T22:51:24.216Z",
          "iopub.status.idle": "2022-05-08T22:51:24.196Z"
        }
      }
    },
    {
      "cell_type": "code",
      "source": [
        "# plot dataset\n",
        "plt.scatter(X, y)\n",
        "plt.show()"
      ],
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": "<Figure size 432x288 with 1 Axes>",
            "image/png": "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\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ],
      "execution_count": 6,
      "metadata": {
        "collapsed": true,
        "jupyter": {
          "source_hidden": false,
          "outputs_hidden": false
        },
        "nteract": {
          "transient": {
            "deleting": false
          }
        },
        "execution": {
          "iopub.status.busy": "2022-05-08T22:51:24.201Z",
          "iopub.execute_input": "2022-05-08T22:51:24.205Z",
          "iopub.status.idle": "2022-05-08T22:51:24.288Z",
          "shell.execute_reply": "2022-05-08T22:51:24.283Z"
        }
      }
    },
    {
      "cell_type": "code",
      "source": [
        "from numpy.linalg import inv\n",
        "\n",
        "b = inv(X.T.dot(X)).dot(X.T).dot(y)\n",
        "print(b)\n",
        "# predict using coefficients\n",
        "yhat = X.dot(b)\n",
        "# plot data and predictions\n",
        "plt.scatter(X, y)\n",
        "plt.title('Solve Linear Regression')\n",
        "plt.plot(X, yhat, color='red')\n",
        "plt.show()"
      ],
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "[[1.00016504]]\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": "<Figure size 432x288 with 1 Axes>",
            "image/png": "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\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ],
      "execution_count": 7,
      "metadata": {
        "collapsed": true,
        "jupyter": {
          "source_hidden": false,
          "outputs_hidden": false
        },
        "nteract": {
          "transient": {
            "deleting": false
          }
        },
        "execution": {
          "iopub.status.busy": "2022-05-08T22:51:24.293Z",
          "iopub.execute_input": "2022-05-08T22:51:24.298Z",
          "iopub.status.idle": "2022-05-08T22:51:24.376Z",
          "shell.execute_reply": "2022-05-08T22:51:24.382Z"
        }
      }
    },
    {
      "cell_type": "code",
      "source": [
        "from numpy.linalg import qr\n",
        "\n",
        "# QR decomposition\n",
        "Q, R = qr(X)\n",
        "b = inv(R).dot(Q.T).dot(y)\n",
        "print(b)\n",
        "# predict using coefficients\n",
        "yhat = X.dot(b)\n",
        "# plot data and predictions\n",
        "plt.scatter(X, y)\n",
        "plt.title('QR Decomposition')\n",
        "plt.plot(X, yhat, color='red')\n",
        "plt.show()"
      ],
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "[[1.00016504]]\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": "<Figure size 432x288 with 1 Axes>",
            "image/png": "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\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ],
      "execution_count": 8,
      "metadata": {
        "collapsed": true,
        "jupyter": {
          "source_hidden": false,
          "outputs_hidden": false
        },
        "nteract": {
          "transient": {
            "deleting": false
          }
        },
        "execution": {
          "iopub.status.busy": "2022-05-08T22:51:24.389Z",
          "iopub.execute_input": "2022-05-08T22:51:24.393Z",
          "iopub.status.idle": "2022-05-08T22:51:24.453Z",
          "shell.execute_reply": "2022-05-08T22:51:24.477Z"
        }
      }
    },
    {
      "cell_type": "code",
      "source": [
        "from numpy.linalg import pinv\n",
        "\n",
        "# calculate coefficients\n",
        "b = pinv(X).dot(y)\n",
        "print(b)\n",
        "# predict using coefficients\n",
        "yhat = X.dot(b)\n",
        "# plot data and predictions\n",
        "plt.scatter(X, y)\n",
        "plt.title('Singular-Value Decomposition')\n",
        "plt.plot(X, yhat, color='red')\n",
        "plt.show()"
      ],
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "[[1.00016504]]\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": "<Figure size 432x288 with 1 Axes>",
            "image/png": "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\n"
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ],
      "execution_count": 9,
      "metadata": {
        "collapsed": true,
        "jupyter": {
          "source_hidden": false,
          "outputs_hidden": false
        },
        "nteract": {
          "transient": {
            "deleting": false
          }
        },
        "execution": {
          "iopub.status.busy": "2022-05-08T22:51:24.459Z",
          "iopub.execute_input": "2022-05-08T22:51:24.465Z",
          "shell.execute_reply": "2022-05-08T22:51:24.535Z",
          "iopub.status.idle": "2022-05-08T22:51:24.529Z"
        }
      }
    }
  ],
  "metadata": {
    "kernel_info": {
      "name": "python3"
    },
    "language_info": {
      "name": "python",
      "version": "3.6.13",
      "mimetype": "text/x-python",
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "pygments_lexer": "ipython3",
      "nbconvert_exporter": "python",
      "file_extension": ".py"
    },
    "kernelspec": {
      "argv": [
        "C:/Users/Tin Hang/Anaconda3\\python.exe",
        "-m",
        "ipykernel_launcher",
        "-f",
        "{connection_file}"
      ],
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "nteract": {
      "version": "0.28.0"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}